#ifndef LOGIKA_H
#define LOGIKA_H

#include <QObject>
#include <set>
#include <map>
#include "lessnode.h"

enum Method{Shennon, Hafman};

/** Логика программы
	*
	* См. диаграмму прецедентов.
	*/
class Algorithms : public QObject{
Q_OBJECT
private:
	QString text;

	/** Построить дерево Хафмана.*/
	void createHafmanTree(std::multiset<Node*, lessNode> & HafmanTree);
public:
	explicit Algorithms(QObject *parent = 0);

	/** Ввести текст.*/
	void setText(const QString &text);

	/** Построить оптимальный неравномерный код методом Шеннона.*/
	void CreateOptimKodShennon();

	/** Построить оптимальный неравномерный код методом Хафмана.*/
	void CreateOptimKodHafman();

	/** Определить среднюю длину символа исходного алфавита методом Шеннона.*/
	double defineLengthShennon();

	/** Определить среднюю длину символа исходного алфавита методом Хафмана.*/
	double defineLengthHafman();

	/** Определить коэффициент статистического сжатия методом Шеннона.*/
	double defineFactorStatCompressionShennon();

	/** Определить коэффициент статистического сжатия методом Хафмана.*/
	double defineFactorStatCompressionHafman();

	/** Определить коэффициент относительной эффективности методом Шеннона.*/
	double defineFactorRelativeEfficiencyShennon();

	/** Определить коэффициент относительной эффективности методом Хафмана.*/
	double defineFactorRelativeEfficiencyHafman();

	/** Закодировать методом Шеннона.*/
	QString & codedShennon();

	/** Закодировать методом Хафмана.*/
	QString & codedHafman();

	/** Декодировать методом Шеннона*/
	QString & decodedShennon();

	/** Декодировать методом Хафмана.*/
	QString & decodedHafman();

	/** */

	/** */

	/** */
signals:

public slots:

};

#endif // LOGIKA_H
